home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy005 / files / articulo.t09 < prev    next >
Encoding:
Text File  |  1997-09-19  |  8.5 KB  |  1 lines

  1. εProgramacion BASICA 3D                                                              εBy Skynet                                                                           ε=======================================================================             Este sera el ultimo articulo destinado a la programacion 3D basica.                  En primer lugar, ya sabemos que a partir de los vertices de un objeto                3D en el plano 3D, podemos definir sus caras de la forma en que se                   hacia en los archivos ASC de 3D Studio:                                                                                                                                   ΓVertex:                                                                             ΓVertex 1  x:34.004 y:43.434 z:34.0003                                               ΓVertex 2 ....                                                                       ΓVertex 3 ....                                                                       Γ.                                                                                   Γ.                                                                                   Γ.                                                                                                                                                                        ΓFace:                                                                               ΓFace 1 a:2 b:3 c:5                                                                  ΓFace 2 ...                                                                          ΓFace 3 ...                                                                          Γ.                                                                                   Γ.                                                                                   Γ.                                                                                                                                                                         De esta forma teniamos definido el objeto en 3D en el espacio. Si lo                representamos tendra una estructura de alambres de forma que en la                   ultima version de mi programa este realiza las siguientes modificaciones:                                                                                                 Ω* Rellenado.                                                                        Ω* Representacion por el metodo del pintor.                                                                                                                                La operacion de rellenado consiste en pintar una cara de un mismo color             o aplicar una textura a esa cara de forma que la representacion de la                cara sea correcta.                                                                                                                                                         El rellenado es una operacion sencilla, pero a la vez complicada, ya que nos        vemos en el caso de que el rellenado no puede hacerse empezando por la cara 1        y acabando en la ultima cara. Para ello implementaremos lo que se llama el           algoritmo del pintor:                                                                                                                                                     Ω   La forma de representar el objeto lo haremos de la misma forma que lo            Ω   hacen los pintores. Primero dibujaremos los objetos que estan mas al fondo,      Ω   despues los que se ven antes del fondo, para terminar con las caras que          Ω   tienen un primer plano. De esta forma logramos "tapar" las caras                 Ω   posteriores de una forma muy lenta pero efectiva.                                                                                                                      Otro metodo mas "caro" de implementar, pero mucho mas rapido es un metodo           donde calculamos el vector normal a cada plano del objeto, y si este                 multiplicado vectorialmente por el vector camara nos da una diferencia de            mas de 90 grados, quiere decirnos que ni de coña lo tenemos que rellenar,            ya que no se ve, y por tanto el aumento de velocidad es considerable.                (Sobretodo cuando aplicamos texturas a los objetos).                                                                                                                       La forma que he programado la utilidad para calcular la profundidad,                simplemente ha sido de calcular el baricentro de cada plano, para luego              ordenarlo mediante un quicksort en profundidad.                                                                                                                            De todas formas, el echo de no modificar la estructura de pascal hace que           si no disponemos de un Pentium 133MHz no funcione adecuadamente.                                                                                                                                                                                               φCONSEJOS PARA UN CALCULO MUCHO MEJOR                                                φ====================================                                                                                                                                     Ω* Intentar buscar que el programa dentro de los bucles haga las operaciones         Ω  mucho mas rapidamente. Por ejemplo, si en mi caso hubiese utilizado para          Ω  rotar las figuras grados en vez de radiantes, podria haber supuesto el            Ω  incremento en 2X cada figura, y por lo tanto no haria una multiplicacion,         Ω  sino un corrimiento de X en binario: shr o shl.                                                                                                                        Ω* Hacer siempre tablas de precalculo, de forma que si una operacion va a            Ω  repetirse (o aprox.) simplemente la sustituiremos por la precalculada.                                                                                                 Ejemplo: Precalcular tabla de multiplicar:                                                                                                                                Γ* 1 2 3                                                                             Γ=======                                                                             Γ1|1 2 3                                                                             Γ2|2 4 6                                                                             Γ3|3 6 9   Esto sera un array[1..3,1..3] of 1..9                                                                                                                          Si queremos multiplicar 3*2, entonces el resultado sera el de                        Array[3,2]  FACIL, no???                                                                                                                                                  Ω* Aunque los profes te digan: Esto no esta bien... debes especificar mejor...       Ω                              aunque vaya mas lento...                                                                                                                   UNA KAKA!!! Solo falta que nos metan cursos Microsoft!!!! La velocidad es la         que tiene un factor mas importante en la programacion...sino, para que               aprendemos los jodios costes, y los ciclos de instrucciones en ASM!!! :)                                                                                                  Ω* Vale mas un programa ciego que un programa lento                                  Ω* Nunca comas bocadillos mientras tu demo esta mostrandose a 1000 personas,         Ω  porque puede salirte un "RUNTIME ERROR 00:202" y te puede dar un corte de         Ω  digestion :)                                                                      Ω* En el sexo, como los ordenadores: Lo bueno si breve, dos veces bueno :)           Ω  jjejeje (esto lo sigue mucho un tal Runner)                                                                                                                            Bueno, espero que os haya gustado el final del programa :)                           ∞=======================================================================             ∞Skynet Rulez!                                                                       ∞amarfer@alufis34.ffisic.uv.es